AliRTC2.5/Windows/Qt Demo/configScreenDlg.cpp (88 lines of code) (raw):

#include "configScreenDlg.h" configScreenDlg::configScreenDlg(AliEngine* pEngine, QWidget *parent) : QDialog(parent) , mpEngine(pEngine) { ui.setupUi(this); connect(ui.comboBox_type, SIGNAL(currentIndexChanged(int)), this, SLOT(updateScreenSource(int))); QRegExp regExp("^(-?\d+)(\.\d+)?$"); QRegExpValidator *pattern = new QRegExpValidator(regExp, this); ui.lineEdit_x->setValidator(pattern); ui.lineEdit_y->setValidator(pattern); ui.lineEdit_width->setValidator(pattern); ui.lineEdit_height->setValidator(pattern); init(); } configScreenDlg::~configScreenDlg() { mpEngine = nullptr; } void configScreenDlg::updateScreenSource(int index) { mScreenShareInfo.shareType = (AliEngineScreenShareType)index; mpCurrentSourceList = mpEngine->GetScreenShareSourceInfo(mScreenShareInfo.shareType); if (mpCurrentSourceList == nullptr) return; ui.comboBox_source->clear(); size_t i = 0; for (i = 0; i < mpCurrentSourceList->GetCount(); i++) { AliEngineScreenSourcInfo info = mpCurrentSourceList->GetSourceInfo(i); ui.comboBox_source->addItem(info.sourceName.c_str()); if (mScreenShareInfo.shareSourceId == QString(info.sourceId.c_str()).toUInt()) { ui.comboBox_source->setCurrentIndex(i); } } if (i >= mpCurrentSourceList->GetCount()) { ui.comboBox_source->setCurrentIndex(0); AliEngineScreenSourcInfo info = mpCurrentSourceList->GetSourceInfo(0); mScreenShareInfo.shareSourceId = QString(info.sourceId.c_str()).toUInt(); } } void configScreenDlg::on_pushButton_ok_clicked() { if (nullptr != mpEngine) { int idx = ui.comboBox_source->currentIndex(); if (idx < mpCurrentSourceList->GetCount()) { AliEngineScreenSourcInfo info = mpCurrentSourceList->GetSourceInfo(idx); mScreenShareInfo.shareSourceId = QString(info.sourceId.c_str()).toUInt(); } mScreenShareInfo.shareConfig.shareRegion.originX = ui.lineEdit_x->text().toFloat(); mScreenShareInfo.shareConfig.shareRegion.originY = ui.lineEdit_y->text().toFloat(); mScreenShareInfo.shareConfig.shareRegion.width = ui.lineEdit_width->text().toFloat(); mScreenShareInfo.shareConfig.shareRegion.height = ui.lineEdit_height->text().toFloat(); if (AliEngineScreenShareDesktop == mScreenShareInfo.shareType) { mpEngine->StartScreenShareByDesktopId(mScreenShareInfo.shareSourceId, mScreenShareInfo.shareConfig); } else { mpEngine->StartScreenShareByWindowId(mScreenShareInfo.shareSourceId, mScreenShareInfo.shareConfig); } accept(); } } void configScreenDlg::on_checkBox_region_clicked() { mScreenShareInfo.shareConfig.isShareByRegion = ui.checkBox_region->isChecked(); ui.lineEdit_x->setEnabled(mScreenShareInfo.shareConfig.isShareByRegion); ui.lineEdit_y->setEnabled(mScreenShareInfo.shareConfig.isShareByRegion); ui.lineEdit_width->setEnabled(mScreenShareInfo.shareConfig.isShareByRegion); ui.lineEdit_height->setEnabled(mScreenShareInfo.shareConfig.isShareByRegion); } void configScreenDlg::init() { if (nullptr != mpEngine) { mScreenShareInfo.shareType = mpEngine->GetCurrentScreenShareSourceType(); mScreenShareInfo.shareConfig = mpEngine->GetScreenShareConfig(); updateScreenSource(mScreenShareInfo.shareType); ui.checkBox_region->setChecked(mScreenShareInfo.shareConfig.isShareByRegion); on_checkBox_region_clicked(); ui.lineEdit_x->setText(QString::number(mScreenShareInfo.shareConfig.shareRegion.originX, 'f')); ui.lineEdit_y->setText(QString::number(mScreenShareInfo.shareConfig.shareRegion.originY, 'f')); ui.lineEdit_width->setText(QString::number(mScreenShareInfo.shareConfig.shareRegion.width, 'f')); ui.lineEdit_height->setText(QString::number(mScreenShareInfo.shareConfig.shareRegion.height, 'f')); } }